package com.softer.wxzj.mapper;

import com.softer.wxzj.entity.FlowConfig;
import com.softer.wxzj.mapper.base.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * FlowConfigMapper class
 * @author zcz
 * @date 2019/1/16
 */
@Repository
public interface FlowConfigMapper extends BaseMapper<FlowConfig> {
    /**
     * 根据类型查询配置列表,进度条时使用
     * @param flowType
     * @return
     */
    List<FlowConfig> getConfigListByFlowType(String flowType);
    /**
     * 根据业务id查询当前配置,进度条时使用
     * @param businessId
     * @return
     */
    FlowConfig getCurrentConfigByBusinessId(@Param("businessId") String businessId,@Param("flowType") String flowType);
    /**
     * 根据类型查询count
     * @param flowType
     * @return
     */
    int getCountByFlowType(String flowType);
    /**
     * 检查是否符合新增、更新条件
     * @param flowConfig
     * @return
     */
    int isQualifiedCheck(FlowConfig flowConfig);

    /**
     * 根据类型查询第一条审批节点
     * @param flowType
     * @return
     */
    FlowConfig getInfoByFlowType(String flowType);

    /**
     * 根据id查询当前和下一个审批节点
     * @param id
     * @return
     */
    List<FlowConfig> getInfoCurrAndNextById(String id);

    /**
     * 根据配置id查询配置信息
     * @param id
     * @return
     */
    FlowConfig getInfoById(String id);
    /**
     * 根据id查询当前和上一个审批节点
     * @param id
     * @return
     */
    List<FlowConfig> getInfoCurrAndUpById(String id);

    /**
     * 根据用户和流程类型查询是否在配置表中
     * @param operNo
     * @param flowType
     * @return
     */
    int getCountByOperNoAndFlowType(@Param("operNo")String operNo,@Param("flowType")String flowType);

    /**
     * 根据用户和流程类型查询配置信息
     * @param operNo
     * @param flowType
     * @return
     */
    FlowConfig getFlowConfigByOperNoAndFlowType(@Param("operNo")String operNo,@Param("flowType")String flowType);

    /**
     * 新增或替换
     * @param flowConfig
     * @return
     */
    int replace(FlowConfig flowConfig);

    /**
     * 根据用户和流程类型当前步数
     * @param operNo
     * @param flowType
     * @return
     */
    String getFlowStepByOperNoAndFlowType(@Param("operNo") String operNo,@Param("flowType")String flowType);
    /**
     * 根据步数查询下级节点总数
     * @param flowStep
     * @param flowType
     * @return
     */
    int getNextCountByFlowStep(@Param("flowStep")Integer flowStep,@Param("flowType")String flowType);
    /**
     * 查询申请人
     *
     * @param businessId 业务ID
     * @param flowType   类型
     * @return 申请人
     */
    String getApplicant(@Param("businessId") String businessId,@Param("flowType") String flowType);
}
